package com.ruoyi.until;

import com.ruoyi.common.config.RuoYiConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @Title:
 * @author: WYJ
 * @date: 2025/11/19
 */
@Slf4j
public class ImageDownloadUtil {

    // 本地存储路径（根据若依配置调整）
    private static final String UPLOAD_PATH_FI = "D:/ruoyi/uploadPath";
    private static final String UPLOAD_PATH = "/upload/";

    /**
     * 根据图片URL下载图片到本地
     *
     * @param imageUrl 图片URL
     * @return 本地图片路径
     */
    public static String downloadImage(String imageUrl)   {
        if (imageUrl == null || imageUrl.trim().isEmpty()) {
            throw new IllegalArgumentException("图片URL不能为空");
        }


        // 获取文件扩展名
        String fileExtension = getFileExtension(imageUrl);
        // 生成文件名
        String fileName = generateFileName(fileExtension);
        // 生成存储路径
            String storagePath = getStoragePath(fileName);

        log.info("存储路径{}", storagePath);
            // 创建目录
            File directory = new File(storagePath).getParentFile();
            if (!directory.exists()) {
                directory.mkdirs();
            }

        try {
            // 下载图片
            FileUtils.copyURLToFile(new URL(imageUrl), new File(storagePath));
        } catch (IOException e) {
            e.printStackTrace();
        }

        log.info("图片下载成功: {} -> {}", imageUrl, storagePath);

        // 返回相对路径（根据若依配置调整）
        return "/profile"+ UPLOAD_PATH + getDatePath() + "/" + fileName;


        //log.error("下载图片失败: {}", imageUrl, e);


    }

    /**
     * 获取文件扩展名
     */
    private static String getFileExtension(String url) {
        try {
            String path = new URL(url).getPath();
            int lastDotIndex = path.lastIndexOf(".");
            if (lastDotIndex > 0) {
                return path.substring(lastDotIndex + 1);
            }
        } catch (Exception e) {
            log.warn("无法从URL获取文件扩展名: {}", url);
        }
        return "jpg"; // 默认扩展名
    }

    /**
     * 生成文件名
     */
    private static String generateFileName(String extension) {
        return UUID.randomUUID().toString().replace("-", "") + "." + extension;
    }

    /**
     * 获取日期路径（按日期分类存储）
     */
    private static String getDatePath() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        return sdf.format(new Date());
    }

    /**
     * 获取存储绝对路径
     */
    private static String getStoragePath(String fileName) {
        String baseDir = getUploadBaseDir();
        return baseDir + getDatePath() + "/" + fileName;
    }

    private static String defaultBaseDir = RuoYiConfig.getProfile();
    /**
     * 获取上传文件基础目录
     */
    private static String getUploadBaseDir() {
        // 这里可以根据若依的配置获取上传目录
        // 默认使用系统临时目录，实际项目中应该从配置文件中读取
        return UPLOAD_PATH_FI + UPLOAD_PATH;
        //return System.getProperty("java.io.tmpdir") + UPLOAD_PATH;
    }
}
